base/SOURCES/gdb-rhbz1320945-float128-2o...

106 lines
3.0 KiB
Diff
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

commit ae438bc5c06b770c00f37e4ed244707ce3ab9ff4
Author: Ulrich Weigand <ulrich.weigand@de.ibm.com>
Date: Tue Sep 6 17:25:31 2016 +0200
Fix TYPE_SPECIFIC_FIELD for types created via arch_type
A type's TYPE_SPECIFIC_FIELD is supposed to be initialized as appropriate
for the type code. This does happen if the type is created via init_type,
but not if it created via arch_type.
Fixed by extracting the initialization logic into a new set_type_code
routine, which is then called from both places.
gdb/ChangeLog:
* gdbtypes.c (set_type_code): New function.
(init_type, arch_type): Use it.
Signed-off-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
### a/gdb/ChangeLog
### b/gdb/ChangeLog
## -1,5 +1,10 @@
2016-09-05 Ulrich Weigand <uweigand@de.ibm.com>
+ * gdbtypes.c (set_type_code): New function.
+ (init_type, arch_type): Use it.
+
+2016-09-05 Ulrich Weigand <uweigand@de.ibm.com>
+
* ada-lang.c (ada_language_arch_info): Use gdbarch_long_double_bit
instead of gdbarch_double_bit for "long_long_float".
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -2681,6 +2681,30 @@ allocate_gnat_aux_type (struct type *type)
*(TYPE_GNAT_SPECIFIC (type)) = gnat_aux_default;
}
+/* Helper function to initialize a newly allocated type. Set type code
+ to CODE and initialize the type-specific fields accordingly. */
+
+static void
+set_type_code (struct type *type, enum type_code code)
+{
+ TYPE_CODE (type) = code;
+
+ switch (code)
+ {
+ case TYPE_CODE_STRUCT:
+ case TYPE_CODE_UNION:
+ case TYPE_CODE_NAMESPACE:
+ INIT_CPLUS_SPECIFIC (type);
+ break;
+ case TYPE_CODE_FLT:
+ TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FLOATFORMAT;
+ break;
+ case TYPE_CODE_FUNC:
+ INIT_FUNC_SPECIFIC (type);
+ break;
+ }
+}
+
/* Helper function to initialize the standard scalar types.
If NAME is non-NULL, then it is used to initialize the type name.
@@ -2694,7 +2718,7 @@ init_type (enum type_code code, int length, int flags,
struct type *type;
type = alloc_type (objfile);
- TYPE_CODE (type) = code;
+ set_type_code (type, code);
TYPE_LENGTH (type) = length;
gdb_assert (!(flags & (TYPE_FLAG_MIN - 1)));
@@ -2730,20 +2754,6 @@ init_type (enum type_code code, int length, int flags,
if (name && strcmp (name, "char") == 0)
TYPE_NOSIGN (type) = 1;
- switch (code)
- {
- case TYPE_CODE_STRUCT:
- case TYPE_CODE_UNION:
- case TYPE_CODE_NAMESPACE:
- INIT_CPLUS_SPECIFIC (type);
- break;
- case TYPE_CODE_FLT:
- TYPE_SPECIFIC_FIELD (type) = TYPE_SPECIFIC_FLOATFORMAT;
- break;
- case TYPE_CODE_FUNC:
- INIT_FUNC_SPECIFIC (type);
- break;
- }
return type;
}
@@ -4634,7 +4644,7 @@ arch_type (struct gdbarch *gdbarch,
struct type *type;
type = alloc_type_arch (gdbarch);
- TYPE_CODE (type) = code;
+ set_type_code (type, code);
TYPE_LENGTH (type) = length;
if (name)