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
@ -541,9 +541,19 @@ __cxa_demangle_gnu3(const char *org)
|
|||||||
char *rtn;
|
char *rtn;
|
||||||
bool has_ret, more_type;
|
bool has_ret, more_type;
|
||||||
|
|
||||||
if (org == NULL || (org_len = strlen(org)) < 2)
|
if (org == NULL)
|
||||||
return (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 (org_len > 11 && !strncmp(org, "_GLOBAL__I_", 11)) {
|
||||||
if ((rtn = malloc(org_len + 19)) == NULL)
|
if ((rtn = malloc(org_len + 19)) == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
@ -552,8 +562,6 @@ __cxa_demangle_gnu3(const char *org)
|
|||||||
return (rtn);
|
return (rtn);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (org[0] != '_' || org[1] != 'Z')
|
|
||||||
return (NULL);
|
|
||||||
|
|
||||||
if (!cpp_demangle_data_init(&ddata, org + 2))
|
if (!cpp_demangle_data_init(&ddata, org + 2))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
_URC_NO_REASON = 0,
|
||||||
_URC_OK = 0, /* operation completed successfully */
|
_URC_OK = 0, /* operation completed successfully */
|
||||||
_URC_FOREIGN_EXCEPTION_CAUGHT = 1,
|
_URC_FOREIGN_EXCEPTION_CAUGHT = 1,
|
||||||
_URC_END_OF_STACK = 5,
|
_URC_END_OF_STACK = 5,
|
||||||
@ -96,7 +97,7 @@ struct _Unwind_Exception
|
|||||||
} pr_cache;
|
} pr_cache;
|
||||||
/** Force alignment of next item to 8-byte boundary */
|
/** Force alignment of next item to 8-byte boundary */
|
||||||
long long int :0;
|
long long int :0;
|
||||||
};
|
} __attribute__((__aligned__(8)));
|
||||||
|
|
||||||
/* Unwinding functions */
|
/* Unwinding functions */
|
||||||
_Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *ucbp);
|
_Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *ucbp);
|
||||||
|
@ -40,6 +40,7 @@ extern "C" {
|
|||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
_URC_NO_REASON = 0,
|
_URC_NO_REASON = 0,
|
||||||
|
_URC_OK = 0,
|
||||||
_URC_FOREIGN_EXCEPTION_CAUGHT = 1,
|
_URC_FOREIGN_EXCEPTION_CAUGHT = 1,
|
||||||
_URC_FATAL_PHASE2_ERROR = 2,
|
_URC_FATAL_PHASE2_ERROR = 2,
|
||||||
_URC_FATAL_PHASE1_ERROR = 3,
|
_URC_FATAL_PHASE1_ERROR = 3,
|
||||||
@ -78,9 +79,12 @@ struct _Unwind_Exception
|
|||||||
{
|
{
|
||||||
uint64_t exception_class;
|
uint64_t exception_class;
|
||||||
_Unwind_Exception_Cleanup_Fn exception_cleanup;
|
_Unwind_Exception_Cleanup_Fn exception_cleanup;
|
||||||
unsigned long private_1;
|
uintptr_t private_1;
|
||||||
unsigned long private_2;
|
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_RaiseException (struct _Unwind_Exception *);
|
||||||
extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *,
|
extern _Unwind_Reason_Code _Unwind_ForcedUnwind (struct _Unwind_Exception *,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user