@@ -294,6 +294,7 @@ fn build_variant(
294294) -> ( Vec < PrMemoryRegion > , Vec < String > ) {
295295 let mut memory_map = Vec :: new ( ) ;
296296 let mut variant_algos = Vec :: new ( ) ;
297+ let mut legacy_emitted = false ;
297298 let regions = merge_regions ( & variant. memory ) ;
298299 for region in & regions {
299300 let access = MemoryAccess {
@@ -329,13 +330,15 @@ fn build_variant(
329330 . iter ( )
330331 . any ( |a| a. silicon == silicon && a. arch == arch && a. region_kind == kind)
331332 {
332- // Name by kind so split-SYS chips (v1: SYS_1 +
333- // SYS_2) share one entry instead of two copies.
334333 let suffix = match kind {
335334 "ob" => "opt" ,
336335 other => other,
337336 } ;
338- let algo_name = format ! ( "ch32-{}-{}" , silicon, suffix) ;
337+ let region_idx = split_name ( & region. name )
338+ . 1
339+ . map ( |n| format ! ( "-{}" , n) )
340+ . unwrap_or_default ( ) ;
341+ let algo_name = format ! ( "ch32-{}-{}{}" , silicon, suffix, region_idx) ;
339342 if !variant_algos. contains ( & algo_name) {
340343 variant_algos. push ( algo_name. clone ( ) ) ;
341344 }
@@ -345,7 +348,8 @@ fn build_variant(
345348 . push ( range. clone ( ) ) ;
346349 algo_kind. insert ( algo_name, kind. to_string ( ) ) ;
347350
348- if kind == "usr" {
351+ if kind == "usr" && !legacy_emitted {
352+ legacy_emitted = true ;
349353 let alias_range = 0u64 ..( range. end - range. start ) ;
350354 memory_map. push ( PrMemoryRegion :: Nvm ( NvmRegion {
351355 name : Some ( "USR_LEGACY" . to_string ( ) ) ,
0 commit comments