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:
Dimitry Andric 2021-02-18 22:30:27 +01:00
commit 0ee0dbfb0d
3 changed files with 20 additions and 7 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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 *,