@@ -1976,16 +1976,6 @@ arm_option_override (void)
else
max_insns_skipped = current_tune->max_insns_skipped;
- /* Hot/Cold partitioning is not currently supported, since we can't
- handle literal pool placement in that case. */
- if (flag_reorder_blocks_and_partition)
- {
- inform (input_location,
- "-freorder-blocks-and-partition not supported on this architecture");
- flag_reorder_blocks_and_partition = 0;
- flag_reorder_blocks = 1;
- }
-
if (flag_pic)
/* Hoisting PIC address calculations more aggressively provides a small,
but measurable, size reduction for PIC code. Therefore, we decrease
@@ -13332,8 +13322,21 @@ arm_reorg (void)
minipool_pad = 0;
/* Scan all the insns and record the operands that will need fixing. */
- for (insn = next_nonnote_insn (insn); insn; insn = next_nonnote_insn (insn))
+ for (insn = next_nondebug_insn (insn); insn; insn = next_nondebug_insn (insn))
{
+ if (NOTE_P (insn))
+ {
+ if (NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS)
+ {
+ /* Given we cannot address a range greater than 4M go
+ ahead and increase the address sky high to force
+ all pools before this note to be dumped. */
+ address += 0x400000;
+ }
+ else
+ continue;
+ }
+
if (TARGET_CIRRUS_FIX_INVALID_INSNS
&& (arm_cirrus_insn_p (insn)
|| GET_CODE (insn) == JUMP_INSN