Merge libcxxrt master 8049924686b8414d8e652cbd2a52c763b48e8456
Interesting fixes: b3c73ba libelftc_dem_gnu3: Sync with elftoolchain r3877 7b2335c Mostly fix __cxa_demangle after #3 Reported by: arichardson PR: 253226 MFC after: 3 days
This commit is contained in:
commit
0ee0dbfb0d
contrib/libcxxrt
@ -541,9 +541,19 @@ __cxa_demangle_gnu3(const char *org)
|
||||
char *rtn;
|
||||
bool has_ret, more_type;
|
||||
|
||||
if (org == NULL || (org_len = strlen(org)) < 2)
|
||||
if (org == NULL)
|
||||
return (NULL);
|
||||
|
||||
org_len = strlen(org);
|
||||
// Try demangling as a type for short encodings
|
||||
if ((org_len < 2) || (org[0] != '_' || org[1] != 'Z' )) {
|
||||
if (!cpp_demangle_data_init(&ddata, org))
|
||||
return (NULL);
|
||||
if (!cpp_demangle_read_type(&ddata, 0))
|
||||
goto clean;
|
||||
rtn = vector_str_get_flat(&ddata.output, (size_t *) NULL);
|
||||
goto clean;
|
||||
}
|
||||
if (org_len > 11 && !strncmp(org, "_GLOBAL__I_", 11)) {
|
||||
if ((rtn = malloc(org_len + 19)) == NULL)
|
||||
return (NULL);
|
||||
@ -552,8 +562,6 @@ __cxa_demangle_gnu3(const char *org)
|
||||
return (rtn);
|
||||
}
|
||||
|
||||
if (org[0] != '_' || org[1] != 'Z')
|
||||
return (NULL);
|
||||
|
||||
if (!cpp_demangle_data_init(&ddata, org + 2))
|
||||
return (NULL);
|
||||
|
@ -29,6 +29,7 @@
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
_URC_NO_REASON = 0,
|
||||
_URC_OK = 0, /* operation completed successfully */
|
||||
_URC_FOREIGN_EXCEPTION_CAUGHT = 1,
|
||||
_URC_END_OF_STACK = 5,
|
||||
@ -96,7 +97,7 @@ struct _Unwind_Exception
|
||||
} pr_cache;
|
||||
/** Force alignment of next item to 8-byte boundary */
|
||||
long long int :0;
|
||||
};
|
||||
} __attribute__((__aligned__(8)));
|
||||
|
||||
/* Unwinding functions */
|
||||
_Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *ucbp);
|
||||
|
@ -40,6 +40,7 @@ extern "C" {
|
||||
typedef enum
|
||||
{
|
||||
_URC_NO_REASON = 0,
|
||||
_URC_OK = 0,
|
||||
_URC_FOREIGN_EXCEPTION_CAUGHT = 1,
|
||||
_URC_FATAL_PHASE2_ERROR = 2,
|
||||
_URC_FATAL_PHASE1_ERROR = 3,
|
||||
@ -78,9 +79,12 @@ struct _Unwind_Exception
|
||||
{
|
||||
uint64_t exception_class;
|
||||
_Unwind_Exception_Cleanup_Fn exception_cleanup;
|
||||
unsigned long private_1;
|
||||
unsigned long private_2;
|
||||
} ;
|
||||
uintptr_t private_1;
|
||||
uintptr_t private_2;
|
||||
#if __SIZEOF_POINTER__ == 4
|
||||
uint32_t reserved[3];
|
||||
#endif
|
||||
} __attribute__((__aligned__));
|
||||
|
||||
extern _Unwind_Reason_Code _Unwind_RaiseException (struct _Unwind_Exception *);
|
||||
extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *,
|
||||
|
Loading…
x
Reference in New Issue
Block a user