Skip to content

feat(libSceIcu): declare 72 callable exports - #13128

Merged
oneandonlydean merged 3 commits into
boykopovar:mainfrom
kyon-eth:feat/icu-common-320-exports
Nov 5, 2026
Merged

oneandonlydean merged 3 commits into
boykopovar:mainfrom
kyon-eth:feat/icu-common-320-exports

Conversation

@kyon-eth

Copy link
Copy Markdown
Contributor

What

Declare 72 additional libSceIcu callable exports. Each candidate name hashes to a typed function NID in the public 3.20 catalogue, and per-image records show the same module and library identities in two version-labelled images. Neither image label authenticates retail firmware provenance. These are import-resolution declarations that throw; signatures and behavior are unverified, and no game unblock is claimed. Data exports and implementations are outside this change.

The overlap checker could not automatically compare shared files in #12320 and #12738 because those branches conflict with main. Their added ICU definitions were checked separately; none matches the proposed NIDs.

Tested

  • macOS x86-64: compiled original and updated export sources and verified the object symbol delta against the 72 names.
  • Audited public headers, conventions, whitespace and open PR overlap.
  • No Linux, Windows, console or game run was performed.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: none
  • GPUs tested: n/a
  • AI-assisted: yes

@github-actions

Copy link
Copy Markdown

Progress report (08a10d2 → a7e6e93)

📉 System libraries: 43.05% (-0.19%, +72 declared functions)

🆕 72 declared as stubs
Library Name
libSceIcu u_tolower
libSceIcu u_totitle
libSceIcu u_toupper
libSceIcu ublock_getCode
libSceIcu ubrk_close
libSceIcu ubrk_countAvailable
libSceIcu ubrk_current
libSceIcu ubrk_first
libSceIcu ubrk_following
libSceIcu ubrk_getAvailable
libSceIcu ubrk_getRuleStatus
libSceIcu ubrk_isBoundary
libSceIcu ubrk_last
libSceIcu ubrk_next
libSceIcu ubrk_open
libSceIcu ubrk_preceding
libSceIcu ubrk_previous
libSceIcu ubrk_setText
libSceIcu ubrk_setUText
libSceIcu ucnv_cbFromUWriteBytes
libSceIcu ucnv_close
libSceIcu ucnv_convertEx
libSceIcu ucnv_fromUnicode
libSceIcu ucnv_getCanonicalName
libSceIcu ucnv_getName
libSceIcu ucnv_open
libSceIcu ucnv_reset
libSceIcu ucnv_setFallback
libSceIcu ucnv_setFromUCallBack
libSceIcu ucnv_setSubstChars
libSceIcu ucnv_setToUCallBack
libSceIcu ucnv_toUChars
libSceIcu ucnv_toUnicode
libSceIcu ucurr_getName
libSceIcu ucurr_openISOCurrencies
libSceIcu udata_setCommonData
libSceIcu udata_setFileAccess
libSceIcu uloc_addLikelySubtags
libSceIcu uloc_canonicalize
libSceIcu uloc_countAvailable
libSceIcu uloc_forLanguageTag
libSceIcu uloc_getAvailable
libSceIcu uloc_getBaseName
libSceIcu uloc_getCharacterOrientation
libSceIcu uloc_getCountry
libSceIcu uloc_getDefault
libSceIcu uloc_getKeywordValue
libSceIcu uloc_getLanguage
libSceIcu uloc_getScript
libSceIcu uloc_minimizeSubtags
libSceIcu uloc_setKeywordValue
libSceIcu uloc_toLanguageTag
libSceIcu uloc_toUnicodeLocaleType
libSceIcu unorm2_composePair
libSceIcu unorm2_getNFCInstance
libSceIcu unorm2_getNFDInstance
libSceIcu unorm2_getNFKCInstance
libSceIcu unorm2_getNFKDInstance
libSceIcu unorm2_getRawDecomposition
libSceIcu unorm2_isNormalized
libSceIcu unorm2_normalize
libSceIcu ures_close
libSceIcu ures_getByKey
libSceIcu ures_getStringByKey
libSceIcu ures_open
libSceIcu uscript_getScript
libSceIcu uscript_getShortName
libSceIcu uscript_hasScript
libSceIcu utext_close
libSceIcu utext_openConstUnicodeString
libSceIcu utext_openUChars
libSceIcu utext_setup

Changed libraries (implemented exports)

Library Before After Change
libSceIcu 21/120 (17.50%) 21/192 (10.94%) -6.56%

@github-actions

github-actions Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 10964 core/libs/prx/libSceIcu/libSceIcu.hpp
docs/dev/debt/libSceIcu.md
PR 10965 core/libs/prx/libSceIcu/libSceIcu.hpp
docs/dev/debt/libSceIcu.md
PR 10966 core/libs/prx/libSceIcu/libSceIcu.hpp
docs/dev/debt/libSceIcu.md
PR 10967 core/libs/prx/libSceIcu/libSceIcu.hpp
docs/dev/debt/libSceIcu.md
PR 12320 core/libs/prx/libSceIcu/Export.cpp
core/libs/prx/libSceIcu/libSceIcu.hpp
docs/dev/debt/libSceIcu.md
PR 12738 core/libs/prx/libSceIcu/libSceIcu.hpp
docs/dev/debt/libSceIcu.md
PR 14212 docs/dev/debt/libSceIcu.md

@CnRJay CnRJay left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correction (2026-11-01): this review demanded a title for a PR where no title can supply one. CONTRIBUTING allows Unblocks: none. The technical points below are unaffected.

No title ID and no log line here. The description says "no game unblock is claimed" and Unblocks: none, so nothing shows a title on main reaching any of these 72 libSceIcu NIDs. Declaring names that throw through NotImplemented_nid_no_patch does not change what a title does today, since an unresolved import already stops it.

A related question: all 72 are int APS5_VABI name() with no parameters, including functions such as u_tolower, u_totitle and ubrk_first whose real signatures are known from ICU. If the declarations are meant to be the starting point for implementation, giving them real prototypes is cheap here and avoids redeclaring them later.

Please add the title ID that imports one of these and the log line from main showing it reaching the import. Without that this is inventory bookkeeping, not progress on a title.

@oneandonlydean
oneandonlydean merged commit 253c782 into boykopovar:main Nov 5, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants