It denotes that object file doesn't rely on any C++ ABI.
Also this flag is used to skip C++ ABI validation in linker.
Change-Id: I1ed4be997190a2ffdc4642946743ee9908a30348
Signed-off-by: Andrey Kazmin <a.kazmin@partner.samsung.com>
return FALSE;
}
- if (!elf_gnu_property_validate_flag(aprop->u.number,
+ if (!(aprop->u.number & GNU_PROPERTY_DUAL_CXX_ABI ||
+ bprop->u.number & GNU_PROPERTY_DUAL_CXX_ABI) &&
+ !elf_gnu_property_validate_flag(aprop->u.number,
bprop->u.number,
GNU_PROPERTY_USECXX_VALIDATION,
GNU_PROPERTY_USECXX11_ABI))
is_updated = TRUE;
}
- if ((aprop->u.number ^ bprop->u.number) & GNU_PROPERTY_USECXX11_ABI)
+ if (aprop->u.number & GNU_PROPERTY_DUAL_CXX_ABI)
{
- aprop->u.number |= GNU_PROPERTY_USECXX11_ABI;
- is_updated = TRUE;
+ if (!(bprop->u.number & GNU_PROPERTY_DUAL_CXX_ABI))
+ {
+ aprop->u.number &= ~(GNU_PROPERTY_DUAL_CXX_ABI | GNU_PROPERTY_USECXX11_ABI);
+ aprop->u.number |= bprop->u.number & GNU_PROPERTY_USECXX11_ABI;
+ is_updated = TRUE;
+ }
+ }
+ else
+ {
+ if ((aprop->u.number ^ bprop->u.number) & GNU_PROPERTY_USECXX11_ABI &&
+ !(bprop->u.number & GNU_PROPERTY_DUAL_CXX_ABI))
+ {
+ aprop->u.number |= GNU_PROPERTY_USECXX11_ABI;
+ is_updated = TRUE;
+ }
}
if ((aprop->u.number ^ bprop->u.number) & GNU_PROPERTY_TIZEN_VALIDATION)
{
printf("%#lx [", bitmask);
- printf("%c%ccxx11, ", bitmask & GNU_PROPERTY_USECXX_VALIDATION ? '=' : '~',
- bitmask & GNU_PROPERTY_USECXX11_ABI ? '+' : '!');
+ printf("%c%ccxx11 %cdual, ", bitmask & GNU_PROPERTY_USECXX_VALIDATION ? '=' : '~',
+ bitmask & GNU_PROPERTY_USECXX11_ABI ? '+' : '!',
+ bitmask & GNU_PROPERTY_DUAL_CXX_ABI ? '+' : '!');
printf("%c%casan, ", bitmask & GNU_PROPERTY_SANITIZE_VALIDATION ? '=' : '~',
bitmask & GNU_PROPERTY_SANITIZE_ADDRESS ? '+' : '!');
/* Pre/post cxx11 ABI. */
#define GNU_PROPERTY_USECXX_VALIDATION (1U << 0)
#define GNU_PROPERTY_USECXX11_ABI (1U << 1)
+#define GNU_PROPERTY_DUAL_CXX_ABI (1U << 2)
/* Sanitizer flags. */
-#define GNU_PROPERTY_SANITIZE_VALIDATION (1U << 2)
-#define GNU_PROPERTY_SANITIZE_ADDRESS (1U << 3)
-#define GNU_PROPERTY_SANITIZE_UNDEFINED (1U << 4)
-#define GNU_PROPERTY_SANITIZE_THREAD (1U << 5)
-/* Reserved flag */
-#define GNU_PROPERTY_RESERVED_FIELD (1U << 6)
+#define GNU_PROPERTY_SANITIZE_VALIDATION (1U << 3)
+#define GNU_PROPERTY_SANITIZE_ADDRESS (1U << 4)
+#define GNU_PROPERTY_SANITIZE_UNDEFINED (1U << 5)
+#define GNU_PROPERTY_SANITIZE_THREAD (1U << 6)
/* Tizen version flag */
#define GNU_PROPERTY_TIZEN_VALIDATION (1U << 7)
/* Tizen version offset and mask */